package cn.lingyangwl.agile.gateway.handler;

import cn.lingyangwl.agile.model.enums.StorageTypeEnum;
import cn.lingyangwl.agile.model.module.config.param.StorageParam;

import javax.annotation.PostConstruct;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author shenguangyang
 */
public abstract class AbstractFileHandler {
    private static final Map<StorageTypeEnum, AbstractFileHandler> fileHandler = new ConcurrentHashMap<>();

    @PostConstruct
    public void init() {
        fileHandler.put(this.storageType(), this);
    }

    public abstract StorageTypeEnum storageType();

    public static AbstractFileHandler getInstance(StorageTypeEnum storageType) {
        return fileHandler.get(storageType);
    }

    /**
     * 获取文件访问地址
     * @param bucketName 桶名字
     * @param domain 用户自定义域名
     */
    public abstract String getAccessUrl(String bucketName, StorageParam.Domain domain);

    /**
     * 真实baseUrl转成虚拟的baseUrl, 虚拟baseUrl实际不存在, 在响应的时候要进行替换成真实baseUrl
     * @param domain 自定义域名
     * @param data 目标数据, 请求数据
     */
    public abstract String realToVirtualBaseUrl(String data, StorageParam<?> storageParam, String domain);


}
